// common/cacheManager.js
import userApi from './api/user.js';
/**
 * 缓存管理工具 - 专门处理isFleetUser状态
 */

// 默认配置
const defaultOptions = {
  expireTime: 30 * 60 * 1000, // 默认缓存30分钟
  forceUpdate: false, // 是否强制更新
  showLoading: true, // 是否显示加载中
  loadingText: '加载中...'
}

/**
 * 获取isFleetUser状态
 * @param {object} options - 配置选项
 * @returns {Promise<boolean>} 返回isFleetUser状态的Promise
 */
export const getIsFleetUser = async (options = {}) => {
  // // 合并配置
  // const { expireTime, forceUpdate, showLoading, loadingText } = { ...defaultOptions, ...options }
  
  // // 检查登录状态
  // if (!checkLoginStatus()) {
  //   throw new Error('用户未登录，无法获取isFleetUser状态')
  // }
  
  // // 显示加载中
  // if (showLoading) {
  //   uni.showLoading({ title: loadingText, mask: true })
  // }
  
  // try {
  //   // 如果不是强制更新，尝试从缓存获取
  //   if (!forceUpdate) {
  //     const cachedData = getIsFleetUserCache()
  //     if (cachedData !== null) {
  //       // 关闭加载中
  //       if (showLoading) {
  //         uni.hideLoading()
  //       }
  //       return cachedData
  //     }
  //   }
    
  //   // 从服务器获取数据
  //   const isFleetUser = await fetchIsFleetUserFromServer()
    
  //   // 缓存数据
  //   setIsFleetUserCache(isFleetUser, expireTime)
    
  //   // 关闭加载中
  //   if (showLoading) {
  //     uni.hideLoading()
  //   }
    
  //   return isFleetUser
  // } catch (error) {
  //   // 关闭加载中
  //   if (showLoading) {
  //     uni.hideLoading()
  //   }
    
  //   throw error
  // }
  return false;
}

/**
 * 直接从缓存中获取isFleetUser状态（不发起请求）
 * @returns {boolean|null} isFleetUser状态或null（如果不存在或已过期）
 */
export const getIsFleetUserCache = () => {
  try {
    const cached = uni.getStorageSync('isFleetUser')
    if (!cached) return null
    
    const { value, expireTime } = cached
    // 检查是否过期
    if (expireTime && Date.now() > expireTime) {
      removeIsFleetUserCache()
      return null
    }
    
    return value
  } catch (error) {
    console.error('获取isFleetUser缓存失败:', error)
    return null
  }
}

/**
 * 设置isFleetUser缓存
 * @param {boolean} value - isFleetUser状态值
 * @param {number} expireTime - 过期时间(毫秒)
 */
export const setIsFleetUserCache = (value, expireTime = 0) => {
  try {
    const cacheData = {
      value,
      expireTime: expireTime ? Date.now() + expireTime : 0,
      updateTime: Date.now()
    }
    uni.setStorageSync('isFleetUser', cacheData)
  } catch (error) {
    console.error('设置isFleetUser缓存失败:', error)
    throw error
  }
}

/**
 * 清除isFleetUser缓存
 */
export const removeIsFleetUserCache = () => {
  try {
    uni.removeStorageSync('isFleetUser')
  } catch (error) {
    console.error('清除isFleetUser缓存失败:', error)
    throw error
  }
}

/**
 * 从服务器获取isFleetUser状态
 * @returns {Promise<boolean>} isFleetUser状态
 */
const fetchIsFleetUserFromServer = async () => {
  try {
    // 这里替换为您的实际API请求
    const fleetData = await userApi.isFleetUser();
    // 根据您的API响应结构调整这里
    if (typeof fleetData === 'boolean') {
          return fleetData; // 直接返回 API 返回的布尔值
        } else {
          // 如果 API 返回的不是布尔值，可能是请求失败或者响应结构异常
          // 你可以根据实际情况调整这里的判断逻辑
          console.error('API返回的数据类型不符合预期，期望 boolean，实际:', typeof fleetData, fleetData);
          
          // 尝试从常见的错误响应结构中提取错误信息
          let errorMessage = '获取isFleetUser状态失败: 响应数据格式错误';
          if (fleetData && typeof fleetData === 'object') {
             // 假设可能的错误结构 { code: ..., message: ... } 或 { msg: ... }
             errorMessage = fleetData.message || fleetData.msg || fleetData.errMsg || errorMessage;
          }
          
          throw new Error(errorMessage);
        }
  } catch (error) {
    console.error('从服务器获取isFleetUser状态失败:', error)
    throw error
  }
}

/**
 * 检查登录状态
 * @returns {boolean} 是否已登录
 */
const checkLoginStatus = () => {
  // 根据您的登录状态管理实现
  const token = uni.getStorageSync('token')
  return !!token
}

/**
 * 获取认证token
 * @returns {string} token
 */
const getToken = () => {
  return uni.getStorageSync('token') || ''
}

export default {
  getIsFleetUser,
  getIsFleetUserCache,
  setIsFleetUserCache,
  removeIsFleetUserCache
}